
//上层函数
//字体管理器：起承上启下的作用，向上层提供更简单的接口函数
#include <font_manager.h>
#include <string.h>

static PFontOpr g_ptFonts = NULL;//链表头
static PFontOpr g_ptDefaulFontOpr = NULL;

//2、注册单个字符，放入链表
void RegisterFont(PFontOpr ptFontOpr)
{
	ptFontOpr->ptNext = g_ptFonts;
	g_ptFonts = ptFontOpr;
}
//1、多个字体的注册，去调用底层代码，同时底层的代码要提供一个注册函数
void FontSystemRegister(void)
{
	extern void FreetypeRegister(void);//实现注册结构体的功能
	FreetypeRegister();//底层的函数
}
//3、选择某个字库，aFontFileName：一个字体文件的名字。aFontOprName字库操作的名字
int SelectAndInitFont(char *aFontOprName, char *aFontFileName)
{
	PFontOpr ptTmp = g_ptFonts; //选择想要的PFontOpr，去链表中挑出来
	while (ptTmp)
	{
		if (strcmp(ptTmp->name, aFontOprName) == 0)
			break;
		ptTmp = ptTmp->ptNext;
	}

	if (!ptTmp)
		return -1;
	//保存这个挑选出的文件
	g_ptDefaulFontOpr = ptTmp;
	//判断存在后就去调用初始化函数
	return ptTmp->FontInit(aFontFileName);
}
//4、大小
int SetFontSize(int iFontSize)
{	//调用上面找到的文件中的SetFontSize
	return g_ptDefaulFontOpr->SetFontSize(iFontSize);
}
//5、位图
int GetFontBitMap(unsigned int dwCode, PFontBitMap ptFontBitMap)
{
	return g_ptDefaulFontOpr->GetFontBitMap(dwCode, ptFontBitMap);
}
//6、第8节添加 调用函数得到显示字符串的外框
static int GetStringRegionCar(char *str, PRegionCartesian ptRegionCar)
{
	return g_ptDefaulFontOpr->GetStringRegionCar(str,ptRegionCar);
}

